package com.jch.dm.chapter_8_abstract_factory.factory;

/**
 * @author: jch
 * 抽象工厂模式 示例 抽象工厂类
 **/
public abstract class Factory {
    public static Factory getFactory(String classname) {
        Factory factory = null;
        try {
            // Class类的forName方法动态地读取类信息，使用newInstance方法生成该实例
            factory = (Factory) Class.forName(classname).newInstance();
        } catch (ClassNotFoundException e) {
            System.out.println("没有找到" + classname + "类。");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return factory;
    }

    /**
     * 创建link
     * @param caption 说明
     * @param url url
     * @return link
     */
    public abstract Link createLink(String caption, String url);

    /**
     * 创建tray
     * @param caption 说明
     * @return tray
     */
    public abstract Tray createTray(String caption);

    /**
     * 创建页面
     * @param title 标题
     * @param author 作者
     * @return page
     */
    public abstract Page createPage(String title, String author);

}
